package com.cx.common.util;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author flysand
 * @package com.cx.common.util
 * @date 2021-11-12 23:42
 * @des CollectionUtils:集合工具类
 */
public class CollectionUtils {

    /**
     * 判断collection集合是否为空
     *
     * @param collection 集合
     * @param <E>        泛型
     * @return 结果
     */
    public static <E> boolean isEmpty(Collection<E> collection) {
        return collection == null || collection.size() == 0;
    }

    /**
     * 判断map是否为空
     *
     * @param map map
     * @param <K> key
     * @param <V> val
     * @return is empty
     */
    public static <K, V> boolean isEmpty(Map<K, V> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 判断字符串source是否包含list中的任意一个元素
     *
     * @param source 待判断字符串
     * @param list   list
     * @return 是否包含
     */
    public static boolean contains(String source, List<String> list) {
        if (StringUtils.isBlank(source)) {
            return false;
        }
        if (isEmpty(list)) {
            return true;
        }
        for (String s : list) {
            if (source.contains(s)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断是否以list中的某个字符串开头
     *
     * @param source 带判断字符串
     * @param list   list集合
     * @return 判断结果
     */
    public static boolean startWith(String source, List<String> list) {
        if (StringUtils.isBlank(source)) {
            return false;
        }
        if (isEmpty(list)) {
            return true;
        }
        for (String s : list) {
            if (source.startsWith(s)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 不区分大小写——判断字符串source是否包含list中的任意一个元素
     *
     * @param source 待判断字符串
     * @param list   list
     * @return 是否包含
     */
    public static boolean containsIgnoreCase(String source, List<String> list) {
        if (StringUtils.isBlank(source)) {
            return false;
        }
        if (isEmpty(list)) {
            return true;
        }
        for (String s : list) {
            if (source.toLowerCase().contains(s.toLowerCase())) {
                return true;
            }
        }
        return false;
    }

}
